#!/usr/bin/env python3
"""
SVG to PNG Converter
将logs目录中的所有SVG文件转换为PNG格式
"""

import os
import glob
from PIL import Image
import cairosvg
import argparse
from pathlib import Path

def convert_svg_to_png(svg_path, png_path, scale=2.0):
    """
    将SVG文件转换为PNG文件
    
    Args:
        svg_path: SVG文件路径
        png_path: PNG输出路径
        scale: 缩放倍数，提高PNG质量
    """
    try:
        # 使用cairosvg将SVG转换为PNG
        cairosvg.svg2png(
            url=svg_path,
            write_to=png_path,
            output_width=int(480 * scale),  # 12*40的4倍分辨率再缩放
            output_height=int(480 * scale)
        )
        print(f"✓ 转换成功: {os.path.basename(svg_path)} -> {os.path.basename(png_path)}")
        return True
    except Exception as e:
        print(f"✗ 转换失败: {os.path.basename(svg_path)} - {str(e)}")
        return False

def batch_convert_svg_to_png(logs_dir="../logs", scale=2.0):
    """
    批量转换logs目录中的所有SVG文件为PNG
    
    Args:
        logs_dir: logs目录路径
        scale: PNG缩放倍数
    """
    # 确保logs目录存在
    if not os.path.exists(logs_dir):
        print(f"错误: logs目录不存在: {logs_dir}")
        return
    
    # 查找所有SVG文件
    svg_pattern = os.path.join(logs_dir, "*.svg")
    svg_files = glob.glob(svg_pattern)
    
    if not svg_files:
        print(f"在 {logs_dir} 目录中未找到任何SVG文件")
        return
    
    print(f"找到 {len(svg_files)} 个SVG文件，开始转换...")
    
    success_count = 0
    
    for svg_file in svg_files:
        # 生成对应的PNG文件名
        png_file = svg_file.replace('.svg', '.png')
        
        # 转换文件
        if convert_svg_to_png(svg_file, png_file, scale):
            success_count += 1
    
    print(f"\n转换完成: {success_count}/{len(svg_files)} 个文件成功转换")

def main():
    parser = argparse.ArgumentParser(description='将SVG文件批量转换为PNG文件')
    parser.add_argument('--logs_dir', type=str, default='../../logs',
                        help='logs目录路径 (默认: ../../logs)')
    parser.add_argument('--scale', type=float, default=2.0,
                        help='PNG缩放倍数，提高图像质量 (默认: 2.0)')
    parser.add_argument('--single', type=str, default=None,
                        help='转换单个SVG文件 (可选)')
    
    args = parser.parse_args()
    
    if args.single:
        # 转换单个文件
        if os.path.exists(args.single) and args.single.endswith('.svg'):
            png_file = args.single.replace('.svg', '.png')
            convert_svg_to_png(args.single, png_file, args.scale)
        else:
            print(f"错误: 文件不存在或不是SVG文件: {args.single}")
    else:
        # 批量转换
        batch_convert_svg_to_png(args.logs_dir, args.scale)

if __name__ == "__main__":
    print("=" * 60)
    print("   SVG to PNG 转换工具")
    print("   专为具身世界模型导航快照设计")
    print("=" * 60)
    main()
